package framework.common;

import java.util.Set;

/**
 * Sensorは実際の入出力デバイスを表すクラスである。
 * モデルではDeviceServerで実行される。
 * 実機ではArduino上で実行される。
 *
 * @author uehara
 */
public abstract class Sensor {

	// not null if root sensor
	private DeviceServer device;

	// not null unless root sensor
	private Sensor parent;

	public DeviceServer getDevice() {
		return device;
	}

	public void setDevice(DeviceServer device) {
		this.device = device;
	}

	public Sensor getParent() {
		return parent;
	}

	public void setParent(Sensor parent) {
		this.parent = parent;
	}

	public String getName() {
		if (device != null)
			return device.getDeviceName();
		else
			return parent.getName();
	}

	public abstract SensorResponse sense(SensorRequest req);

	public abstract Set<String> getAttributes();

	public abstract Object getAttribute(String attr);

	public abstract void setAttribute(String attr, Object value);

}
